package com.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;



/**
 * Created by YQR on 2017/12/7.
 */

public class ReadExcel {
	
	
//	public static void main(String[] args) throws IOException {
//		List<Map<String,String>> yqr = ExcelUtil.excelUtil("G:/WMSApiCase.xlsx",0,1,4,8);
//		for(Map<String,String> i:yqr){
//			for(String y:i.keySet()){
//				System.out.println(i.get(y));
//			}
//		}
//	}

	
	/**
	 * @param  FilePath              文件路径
	 * @param  sheetnumber           第几张表
	 * @param  RowBejinNumber        第几行开始
	 * @param  RowEndNumber          第几行结束
	 * @param  URLCellnumber         URL列第几列
	 * @param  BodyParamCellnumber   BodyParam列第几列
	 */
	
	//读取Excel中数据    excelUtil   excelUtil
	public static  List<Map<String,String>> readToExcel(String FilePath,int sheetnumber,int RowBejinNumber,int RowEndNumber, int URLCellnumber,int BodyParamCellnumber ) throws IOException{
		
		/**
		 *  XSSFWorkbook 就代表一个 Excel 文件
		 *  XSSFSheet 代表 Excel 文件中的一张表格
		 *   XSSFRow 代表一行数据
		 *   XSSFCell 代表一列数据
		 */		 
		List<Map<String,String>> list = new ArrayList<>();
	   
		try {
	    	//Excel 文件
	    	// 创建 Excel 文件的输入流对象
			FileInputStream excelFileInputStream = new FileInputStream(FilePath);//@param  FilePath      文件路径
			// 创建其对象，就打开这个 Excel 文件
			XSSFWorkbook workbook = new XSSFWorkbook(excelFileInputStream);
			// 输入流使用后，及时关闭！这是文件流操作中极好的一个习惯！
			excelFileInputStream.close();
			
			// 我们通过 getSheetAt(0) 指定表格索引来获取对应表格
        	// 注意表格索引从 0 开始！
			XSSFSheet sheet = workbook.getSheetAt(sheetnumber);//@param  sheetnumber   第几张表
			
			// 开始循环表格数据,表格的行索引从 0 开始
	     	// testcase.xlsx 第一行是标题行，我们从第二行开始, 对应的行索引是 1
	     	// sheet.getLastRowNum() : 获取当前表格中最后一行数据对应的行索引
			//RowBejinNumber 开始行;   RowEndNumber  结束行;
			for (int rowIndex = RowBejinNumber; rowIndex <= RowEndNumber; rowIndex++) {  //第几行开始
				// XSSFRow 代表一行数据
				XSSFRow row = sheet.getRow(rowIndex);
				if (row == null) {
				continue;
				}
				
				//第几行的第几列  如：第一行的第一列				
				XSSFCell URL=row.getCell(URLCellnumber);             //@param  URLCellnumber     URL列第几列
				XSSFCell BodyParam=row.getCell(BodyParamCellnumber); //@param  BodyParamCellnumber   BodyParam列第几列
				
				
				Map<String,String> hh=new HashMap<>();				
				hh.put("URL", URL.getStringCellValue());
				hh.put("BodyParam", BodyParam.getStringCellValue());
				list.add(hh);
			}
			workbook.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    return list;
		

	}
	
	/**
	  * 写入Excel，在任意坐标处写入数据。
	  * String value：你要输入的内容
	  * int x ：行坐标，Excel从 0 算起
	  * int y   ：列坐标，Excel从 0 算起
	  */
	public static void writeToExcel(String filePath,int x,int y,String value){		
		try {		
			// 创建Excel的工作书册 Workbook,对应到一个excel文档
			XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filePath));
			XSSFSheet sheet=wb.getSheetAt(0);
			XSSFRow row=sheet.getRow(x);
			XSSFCell cell=row.getCell((short) y);
			cell.setCellValue(value);			 
			FileOutputStream os = new FileOutputStream(filePath);
			wb.write(os);
			os.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
